# 字典是无序，键不重复 且元素只能是键值对的可变的 容器
# 无序（在Python3.6字典就是有序了，之前的字典都是无序的）
# 字典中对键的要求，必须可哈希

d = {
    1:29,
    True:5, # 会把前面的覆盖掉
}
print(d)    # {1: 5}

# 字典获取值
info = {
    'age':12,
    'status':True,
    'name':'吴佩琪',
    'data':None,
}
# 有这个键就返回相对应的值，没有就返回none
print(info.get('name'))
print(info.get('email'))
'''
data = info.get('email')
if data == None:
    print('此键不存在')
else:
    print(data)
################################
data = info.get('email')
if data:
    print(data)
else:
    print('此键不存在')
'''

'''
# 字典的键中是否存在 "email"
data = info.get('email')
if 'email' in info:
  data = info.get('email')
  print(data)
else:
    print('此键不存在')
'''
data = info.get('email',666)
print(data)

'''
# 登录案例
user_dict = {
    'wupeiqi':123,
    'alex':123,
}
username = input('请输入用户名：')
password = input('请输入密码：')
pwd = user_dict.get(username)
if password == None:
    print('用户名不存在')
else:
    if password == pwd:
        print('登录成功')
    else:
        print('密码错误')
'''

'''
# 登录案例
user_dict = {
    'wupeiqi':123,
    'alex':123,
}
username = input('请输入用户名：')
password = input('请输入密码：')
pwd = user_dict.get(username)
if pwd:
    if password == pwd:
        print('登录成功')
    else:
        print('密码错误')
else:
    print('用户名不存在')
'''

'''
# 登录案例(建议这样写)
# 简单的逻辑处理放在上面，复杂的放后面
user_dict = {
    'wupeiqi':123,
    'alex':123,
}
username = input('请输入用户名：')
password = input('请输入密码：')
pwd = user_dict.get(username)
if not pwd:
    print('用户名不存在')
else:
    if password == pwd:
        print('登录成功')
    else:
        print('密码错误')
'''

# 设置值
dic = {
    'name':'asdsd',
    'email':'123@xxx',
}
# 如果这个键存在，就不会做任何改变，如果不存在就添加
dic.setdefault('age',18)
print(dic)
dic.setdefault('name','abc')

# 更新键值对
# 如果有就更新，没有就添加
dic.update({'age':12,'status':True})
print(dic)

# 移除键值对
data = dic.pop('status')
print(data,dic)

# 按照顺序移除（后进先出）,移除最后面一个（Python3.6之后，如果是之前的话，随机移除）
data = dic.popitem()
print(data) # ('age', 12)是一个元组
print(dic)

# 字典取值
info = {
    'name': 'asdsd',
    'email': '123@xxx',
}
# print(info['xxx'])  # 如果这个健不存在就会报错
print(info.get('xxx'))

info['name'] = 'alex'
print(info)
info['salary'] = 65465
print(info)
data = info.pop('name')     # 键存在就删除这个键值对，不存在就会报错
print(data)
print(info)
# del info['name']    # 键存在就删除这个键值对，不存在就会报错
'''
if 'age' in info:
    data = info.pop('name')     # 键存在就删除这个键值对，不存在就会报错
    print(data)
    print(info)
    # del info['name']    # 键存在就删除这个键值对，不存在就会报错
else:
    print('键不存在')
'''

# 其它类型转换为字典，数据要两个两个存在
li = [['k1','v1'],['k2','v2']]
print(dict(li))

# 内部原理，对字典的键进行哈希处理
# 查找速度相当快
info = {
    'name': 'asdsd',
    'email': '123@xxx',
}
if 'name' in info:
    print('在')


'''
字典的键必须可哈希(list/set/dict不可哈希)，键的子孙也是如此
字典的值可以是任意类型

'''